#ifndef quantlib_zz_models_i
#define quantlib_zz_models_i

%include stochasticprocess.i
%include zz_processes.i

%{
using QuantLib::CalibratedModel;
using QuantLib::HestonModel;
using QuantLib::HestonProcess;
typedef boost::shared_ptr<CalibratedModel> HestonModelPtr;
%}

//~ %ignore CalibratedModel;
//~ class CalibratedModel{
	//~ private:
		//~ CalibratedModel(){};
//~ };
%template(CalibratedModel) boost::shared_ptr<CalibratedModel>;

%rename(HestonModel) HestonModelPtr;
class HestonModelPtr : public boost::shared_ptr<CalibratedModel> {
	public:
		%extend {
			HestonModelPtr(const HestonProcessPtr& proc){
				const boost::shared_ptr<HestonProcess>& process =
					boost::dynamic_pointer_cast<HestonProcess>(proc);
				return new HestonModelPtr(new HestonModel(process));
			}
		}
};


#endif